package com.util;

import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import com.entity.MyReturn;

import java.util.HashMap;
import java.util.Map;

/**
 * @author ：Fmc
 * @date ：Created in 2022/6/2 16:15
 * @description：我的工具类
 * @modified By：
 * @version: 1.0
 */
public class MyTools {
    // 传入一个原始返回对象，得到一个成功的返回对象
    public static MyReturn getSuccessRes(MyReturn res) {
        res.setCode(ResultStatusEnum.SUCCESS.getCode());
        res.setMsg(ResultStatusEnum.SUCCESS.getMsg());
        return res;
    }

    // 传递一个原始返回对象，得到一个失败的返回对象
    public static MyReturn getFaileRes(MyReturn res) {
        res.setCode(ResultStatusEnum.FAILE.getCode());
        res.setMsg(ResultStatusEnum.FAILE.getMsg());
        return res;
    }
    // 传入一个sql、一个需要拼接的map集合 ，得到一个新的sql语句
    public static String makeSql(String oldSql, Map<String,Object> map,boolean countFlag){
        StringBuffer sql = new StringBuffer(oldSql);
        if (map != null && map.size() > 0) {
            Map<String,Object> whereMap = new HashMap<>();
            // 创建一个map获取，并把搜索框的内容加入到map中
            for (String s : map.keySet()) {
                if (s.contains("search")) {
                    whereMap.put(s.replace("search",""),map.get(s));
                }
            }
            // 把搜索框中的内容拼接到sql语句中
            for (Map.Entry<String,Object> entry : whereMap.entrySet()) {
                sql.append(" and ").append(entry.getKey().toLowerCase()).append(" like '%")
                        .append(entry.getValue()).append("%' ");
            }

            // 判断传来的列名是否为空，不为空就把传来的列名和排序拼接入sql语句
            if (map.get("field") != null && !map.get("field").equals("")) {
                String field = map.get("field") + "";
                String order = map.get("order") + "";
                sql.append(" order by ").append(field).append(" ").append(order);
            }

            // 如果不是获取总条数，就开始分页查询；若是获取总条数，则不拼接limit
            if (!countFlag) {
                if (map.get("page") != null && !map.get("page").equals("")) {
                    int page = Integer.parseInt(map.get("page") + "");
                    int limit = Integer.parseInt(map.get("limit") + "");
                    int begin = (page - 1) * limit;
                    sql.append(" limit ").append(begin).append(",").append(limit);
                }
            }

        }
        String string = sql.toString();
        return string;
    }

    // 插入一个明文，获得一个密文和盐值
    /**
     * @create by: Fmc
     * @description: 插入一个明文，获得一个密文和盐值
     * @create time: 2022/6/6 15:20
     * @return:
     */
    public static Map<String,String> makePasswordSalt(String password){
        Map<String,String> map = new HashMap<>();

        // 随机生成密钥
        byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
        String salt = Base64.encode(key);
        // 构建
        SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, Base64.decode(salt));

        // 加密为16进制表示
        String encryptHex = aes.encryptHex(password);
        map.put("password",encryptHex);
        map.put("salt",salt);

        return map;
    }
    /**
     * @create by: Fmc
     * @description: 插入一个明文和盐值，获得一个密文
     * @create time: 2022/6/6 15:53
     * @return: String
     */
    public static String makePassord(String password,String salt){
        // 构建
        SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, Base64.decode(salt));
        // 加密为16进制表示
        String newPassword = aes.encryptHex(password);
        return newPassword;
    }
}
